Generally, a storage system includes a network (e.g., Ethernet, Fibre Channel (FC), Infiniband, and the like), a network interface, a processor, and a storage device (such as, magnetic disk, flash memory, and so on). Two key goals for computer storage products are low write latency (prompt acknowledgement of writes) and reliable persistence (after the write has been acknowledged, the data is safe).
In order to improve performance, the processor often includes random access memory (RAM) to be used as a read cache or some form of non-volatile memory to be used as a write-back cache. Reliability typically requires that newly written data be safely stored in two (or more) distinct failure domains. A traditional solution uses direct memory access (DMA) to store a write request in RAM, after which the data is copied to a second location (e.g., more RAM or non-volatile RAM (NVRAM) in a separate controller) by the processor or a DMA controller. This copying of the data takes time and consumes bus bandwidth, thereby limiting the achievable response time and throughput.